package com.zhiyou100.servlet;

import com.zhiyou100.dao.StudentDao;
import com.zhiyou100.entity.Student;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 创建 Excel
 *
 * @author yang
 * @version 1.0.0
 * @date 2020-09-15 17:04
 */
@WebServlet(name = "StudentCreateExcel", urlPatterns = "/student/creteExcel")
public class StudentCreateExcel extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取所有学生的信息
        final List<Student> students = new StudentDao().listStudent();

        // 把学生信息写入到工作表中

        // 创建工作簿
        final HSSFWorkbook book = new HSSFWorkbook();
        // 创建工作表
        final HSSFSheet sheet = book.createSheet();
        // 创建第一行
        final HSSFRow row = sheet.createRow(0);
        // 创建首行的样式
        final HSSFCellStyle style0 = book.createCellStyle();
        // 设置图案颜色
        style0.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        // 设置图案样式
        style0.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        // 创建 String 数组，记录标题
        String[] titles = {"学号", "名字", "年龄", "分数", "生日"};
        for (int i = 0; i < titles.length; i++) {
            // 创建单元格
            final HSSFCell cell = row.createCell(i);
            // 设置样式
            cell.setCellStyle(style0);
            // 设置标题的名字
            cell.setCellValue(titles[i]);
        }

        // 创建其他单元格
        for (int i = 0; i < students.size(); i++) {
            // 根据下标获取一个学生
            final Student student = students.get(i);
            // 创建一行
            final HSSFRow rowi = sheet.createRow(i + 1);
            rowi.createCell(0).setCellValue(student.getSid());
            rowi.createCell(1).setCellValue(student.getSname());
            rowi.createCell(2).setCellValue(student.getSage());
            rowi.createCell(3).setCellValue(student.getScore());
            // 创建 第4 行 ，日期
            final HSSFCell cell4 = rowi.createCell(4);
            // 创建一个新的样式
            final HSSFCellStyle style4 = book.createCellStyle();
            // 设置样式的日期格式
            style4.setDataFormat(book.createDataFormat().getFormat("yyyy-MM-dd hh:mm:ss"));
            // 给 第4 个单元格设置样式
            cell4.setCellStyle(style4);
            // 设置值
            cell4.setCellValue(student.getSbirthday());
        }


        // 3 把内存中 工作簿的信息通过 response 的输出流响应给客户端
        String fileName = "student.xls";
        // 获取文件类型
        final String type = req.getServletContext().getMimeType(fileName);
        // 设置响应头，以附件的形式保存
        resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);

        // 获取 response 的输出流
        final ServletOutputStream out = resp.getOutputStream();
        // 把内存中的工作簿写入
        book.write(out);
    }
}
